// getVehicleOccupants(vehicleid) SQInteger CVehicleNatives::GetOccupants(SQVM * pVM) { EntityId vehicleId; sq_getentity(pVM, -1, &vehicleId); CNetworkVehicle * pVehicle = g_pClient->GetVehicleManager()->Get(vehicleId); if(pVehicle) { CSquirrelArguments args; for(BYTE i = 0; i < (MAX_VEHICLE_PASSENGERS + 1); i++) { args.push((int)(i + 1)); CNetworkPlayer * pOccupant = pVehicle->GetOccupant(i); args.push(pOccupant ? (int)pOccupant->GetPlayerId() : (int)INVALID_ENTITY_ID); } sq_pusharg(pVM, CSquirrelArgument(args, false)); return 1; } sq_pushbool(pVM, false); return 1; }
void CServerRPCHandler::Chat(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; CPlayer * pPlayer = g_pPlayerManager->GetAt(playerId); if(pPlayer) { String strChat; if(!pBitStream->Read(strChat)) return; strChat.Truncate(128); CSquirrelArguments pArguments; pArguments.push(playerId); pArguments.push(strChat); if(g_pEvents->Call("playerText", &pArguments).GetInteger() == 1) { CLogFile::Printf("[Chat] %s: %s", pPlayer->GetName().C_String(), strChat.Get()); CBitStream bsSend; bsSend.WriteCompressed(playerId); bsSend.Write(String(strChat)); g_pNetworkManager->RPC(RPC_Chat, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, INVALID_ENTITY_ID, true); } } }
// getVehicleRotation(vehicleid) SQInteger CVehicleNatives::GetRotation(SQVM * pVM) { EntityId vehicleId; sq_getentity(pVM, -1, &vehicleId); if(g_pVehicleManager->Exists(vehicleId)) { CNetworkVehicle * pVehicle = g_pVehicleManager->Get(vehicleId); if(pVehicle) { CVector3 vecRotation; pVehicle->GetRotation(vecRotation); CSquirrelArguments args; args.push(vecRotation.fX); args.push(vecRotation.fY); args.push(vecRotation.fZ); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; } } sq_pushbool(pVM, false); return 1; }
void CServerRPCHandler::Death(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; CPlayer * pPlayer = g_pPlayerManager->GetAt(playerId); if(pPlayer) { EntityId killerPlayerId; EntityId killerVehicleId; EntityId killerWeaponId; if(!pBitStream->ReadCompressed(killerPlayerId)) return; if(!pBitStream->ReadCompressed(killerVehicleId)) return; if(!pBitStream->ReadCompressed(killerWeaponId)) return; if(killerPlayerId != INVALID_ENTITY_ID) { CPlayer * pKiller = g_pPlayerManager->GetAt(killerPlayerId); if(pKiller) CLogFile::Printf("[Death] %s was killed by %s(Weapon %d).", pPlayer->GetName().C_String(), pKiller->GetName().C_String(), killerWeaponId); else killerPlayerId = INVALID_ENTITY_ID; } if(killerVehicleId != INVALID_ENTITY_ID) { CVehicle * pKillerVehicle = g_pVehicleManager->GetAt(killerVehicleId); if(pKillerVehicle) CLogFile::Printf("[Death] %s was killed by vehicle %d.", pPlayer->GetName().C_String(), killerVehicleId); else killerVehicleId = INVALID_ENTITY_ID; } if(killerPlayerId == INVALID_ENTITY_ID && killerVehicleId == INVALID_ENTITY_ID) CLogFile::Printf("[Death] %s died.", pPlayer->GetName().C_String()); CSquirrelArguments pArguments; pArguments.push(playerId); pArguments.push(killerPlayerId); pArguments.push(killerWeaponId); pArguments.push(killerVehicleId); g_pEvents->Call("playerDeath", &pArguments); pPlayer->KillForWorld(); } }
_MEMBER_FUNCTION_IMPL(GUIElement, getPosition) { SQBool relative; sq_getbool(pVM, -1, &relative); CGUIFrameWindow * pWindow = sq_getinstance<CGUIFrameWindow *>(pVM); if(!pWindow) { sq_pushbool(pVM, false); return 1; } CEGUI::Vector2 pos; if(relative != 0) { pos = pWindow->getPosition().asRelative((CEGUI::Size(g_pClient->GetGUI()->GetDisplayWidth (), g_pClient->GetGUI()->GetDisplayHeight()))); } else { pos = pWindow->getPosition().asAbsolute((CEGUI::Size(g_pClient->GetGUI()->GetDisplayWidth (), g_pClient->GetGUI()->GetDisplayHeight()))); } CSquirrelArguments args; args.push(pos.d_x); args.push(pos.d_y); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; }
void CServerRPCHandler::EmptyVehicleSync(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; if(CVAR_GET_BOOL("frequentevents")) { CSquirrelArguments pArguments; pArguments.push(playerId); if(g_pEvents->Call("playerEmptyVehicleSyncReceived", &pArguments).GetInteger() != 1 || g_pEvents->Call("playerSyncReceived", &pArguments).GetInteger() != 1) return; } CBitStream bsSend; EMPTYVEHICLESYNCPACKET syncPacket; if(!pBitStream->Read((PCHAR)&syncPacket, sizeof(EMPTYVEHICLESYNCPACKET))) return; CVehicle * pVehicle = g_pVehicleManager->GetAt(syncPacket.vehicleId); if(pVehicle && g_pVehicleManager->DoesExist(syncPacket.vehicleId)) pVehicle->StoreEmptyVehicle(&syncPacket); //bsSend.Write((char *)&syncPacket, sizeof(EMPTYVEHICLESYNCPACKET)); //g_pNetworkManager->RPC(RPC_EmptyVehicleSync, &bsSend, PRIORITY_LOW, RELIABILITY_UNRELIABLE_SEQUENCED, playerId, false); }
void CServerRPCHandler::ChatInput(CBitStream * pBitStream, CPlayerSocket senderSocket) { CLogFile::Printf("Got ChatInput RPC from player %d", senderSocket.playerId); // Ensure we have a valid bitstream if(!pBitStream) { CLogFile::Printf("Warning: Invalid bitstream for ChatInput RPC"); return; } // Get the player pointer CPlayer * pPlayer = g_pServer->GetPlayerManager()->Get(senderSocket.playerId); // Is the player pointer valid? if(pPlayer) { // Read the data they sent us bool bIsCommand; String strInput; // Read if its a command or not bIsCommand = pBitStream->ReadBit(); // Read the input if(!pBitStream->Read(strInput)) return; // Prepare the event arguments CSquirrelArguments arguments; arguments.push(strInput); // Is it not a command? if(!bIsCommand) { // Trigger the event, if it is canceled, don't output the line to other players if(pPlayer->CallEvent("playerChat", &arguments)) { // Construct the chat input bit stream CBitStream bitStream; // Write the player id bitStream.WriteCompressed(senderSocket.playerId); // Write the input bitStream.Write(strInput); // Send it to all other players g_pServer->GetNetworkManager()->RPC(RPC_CHAT_INPUT, &bitStream, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, INVALID_ENTITY_ID, true); } } else { // Trigger the event pPlayer->CallEvent("playerCommand", &arguments); } CLogFile::Printf("Recieved chat input from player %d (Command?: %s, Input: %s)", senderSocket.playerId, bIsCommand ? "Yes" : "No", strInput.C_String()); } }
EntityId CVehicleManager::Add(int iModelId, CVector3 vecSpawnPosition, CVector3 vecSpawnRotation, BYTE byteColor1, BYTE byteColor2, BYTE byteColor3, BYTE byteColor4, int respawn_delay) { for(EntityId x = 0; x < MAX_VEHICLES; x++) { if(!m_bActive[x]) { m_pVehicles[x] = new CVehicle(x, iModelId, vecSpawnPosition, vecSpawnRotation, byteColor1, byteColor2, byteColor3, byteColor4); if(m_pVehicles[x]) { m_bActive[x] = true; m_pVehicles[x]->SetRespawnDelay(respawn_delay); CSquirrelArguments pArguments; pArguments.push(x); g_pEvents->Call("vehicleCreate", &pArguments); return x; } return INVALID_ENTITY_ID; } } return INVALID_ENTITY_ID; }
EntityId CObjectManager::Create(DWORD dwModelHash, const CVector3& vecPosition, const CVector3& vecRotation) { for(EntityId x = 0; x < MAX_OBJECTS; x++) { if(!m_bActive[x]) { CBitStream bsSend; bsSend.WriteCompressed(x); bsSend.Write(dwModelHash); bsSend.Write(vecPosition); bsSend.Write(vecRotation); g_pNetworkManager->RPC(RPC_NewObject, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, INVALID_ENTITY_ID, true); m_Objects[x].dwModelHash = dwModelHash; m_Objects[x].vecPosition = vecPosition; m_Objects[x].vecRotation = vecRotation; m_bActive[x] = true; m_Objects[x].iBone = -1; CSquirrelArguments pArguments; pArguments.push(x); g_pEvents->Call("objectCreate", &pArguments); return x; } } return INVALID_ENTITY_ID; }
void CServerRPCHandler::CheckpointLeft(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; EntityId checkpointId; if(!pBitStream->Read(checkpointId)) return; CSquirrelArguments pArguments; pArguments.push(playerId); pArguments.push(checkpointId); g_pEvents->Call("playerLeaveCheckpoint", &pArguments); }
// toRGBA( colour ); SQInteger CUtilNatives::ToRGBA( SQVM * pVM ) { SQInteger iColour; sq_getinteger( pVM, -1, &iColour ); CColor m_color( (unsigned long)iColour ); CSquirrelArguments args; args.push( m_color.R ); args.push( m_color.G ); args.push( m_color.B ); args.push( m_color.A ); CSquirrelArgument arguments(args, true); arguments.push( pVM ); return 1; }
// event buttonClick(buttonName, bState) // TODO: remove it. We have better alternative guiClick (OnClick) for any gui element bool OnButtonClick(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("buttonClick"); if(!pEvents->IsEventRegistered(eventName)) return false; CEGUI::Window * pWindow = static_cast<const CEGUI::WindowEventArgs&>(eventArgs).window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CSquirrelArguments pArguments; pArguments.push(pWindow->getName().c_str()); pArguments.push(0); // FIXME or what? pEvents->Call(eventName, &pArguments, pScript); return true; }
void CSquirrel::CompilerErrorFunction(SQVM * pVM, const char * szError, const char * szSource, int iLine, int iColumn) { // Find the script CSquirrel * pScript = CScriptingManager::GetInstance()->Get(pVM); if(pScript) { // Call the 'compilerError' event CSquirrelArguments arguments; arguments.push(szError); arguments.push(szSource); arguments.push(iLine); arguments.push(iColumn); if(CEvents::GetInstance()->Call("compilerError", &arguments, pScript).GetInteger() == 1) CLogFile::Printf("Error: Failed to compile script %s (Error: %s (Line %d, Column %d)).", pScript->GetName().Get(), szError, iLine, iColumn); } }
void CSquirrel::CompilerErrorFunction(SQVM * pVM, const char * szError, const char * szSource, int iLine, int iColumn) { // Find the script CSquirrel * pScript = g_pScriptingManager->Get(pVM); if(pScript) { // Call the 'scriptError' event CSquirrelArguments arguments; arguments.push(szError); arguments.push(szSource); arguments.push(iLine); arguments.push(iColumn); if(g_pEvents->Call("compilerError", &arguments, pScript).GetInteger() == 1) CLogFile::Printf("Error: Failed to compile script %s on Line %d Column %d (%s).", pScript->GetName().Get(), iLine, iColumn, szError); } }
// getActorCoordinates(actorid) SQInteger CActorNatives::GetCoordinates(SQVM * pVM) { EntityId actorId; sq_getentity(pVM, -1, &actorId); if(g_pActorManager->DoesExist(actorId)) { CVector3 vecPosition = g_pActorManager->GetPosition(actorId); CSquirrelArguments args; args.push(vecPosition.fX); args.push(vecPosition.fY); args.push(vecPosition.fZ); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; } sq_pushbool(pVM, false); return 1; }
// event guiKeyPress(string guiName, string key, string keyState) bool OnKeyPress(const CEGUI::KeyEventArgs &eArgs, String keyState) { CEvents * pEvents = g_pClient->GetEvents(); String eventName("guiKeyPress"); if(!pEvents->IsEventRegistered(eventName)) return false; CEGUI::Window * pWindow = eArgs.window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CEGUI::Key::Scan keyCode = eArgs.scancode; CSquirrelArguments pArguments; pArguments.push(eArgs.window->getName().c_str()); pArguments.push(GetKeyNameByScan(eArgs.scancode)); pArguments.push(keyState); CSquirrelArgument pReturn = pEvents->Call(eventName, &pArguments, pScript); return pReturn.GetBool(); }
bool CPlayerManager::Remove(EntityId playerId, BYTE byteReason) { if(!DoesExist(playerId)) return false; CSquirrelArguments pArguments; pArguments.push(playerId); pArguments.push(byteReason); g_pEvents->Call("playerDisconnect", &pArguments); // Clear player variables: g_pGlobalsManager->Remove(playerId); // Delete player blip g_pBlipManager->DeleteForPlayer(playerId); m_pPlayers[playerId]->SetState(STATE_TYPE_DISCONNECT); m_pPlayers[playerId]->DeleteForWorld(); // Mark player as false m_bActive[playerId] = false; String strReason = "None"; if(byteReason == 0) strReason = "Disconnected"; else if(byteReason == 1) strReason = "Lost Connection"; else if(byteReason == 3) strReason = "Classremove"; CLogFile::Printf("[Quit] %s (%d) left the server (%s).", m_pPlayers[playerId]->GetName().Get(), playerId, strReason.Get()); // Only works on windows, if we have linux don't use it! #ifdef _WIN32 SAFE_DELETE( m_pPlayers[playerId] ); #else SAFE_DELETE( m_pPlayers[playerId] ); #endif return true; }
bool CPlayerManager::Add( EntityId playerId, const char * szNick, const char * szIP, const char * szSerial ) { // Is the current player already active? if( IsActive(playerId) ) return false; // Create the network player instance m_pNetworkPlayer[ playerId ] = new CNetworkPlayer; // Did the network player instance fail to create? if( !m_pNetworkPlayer[ playerId ] ) return false; // Set the player id m_pNetworkPlayer[ playerId ]->SetId( playerId ); // Set the player nickname m_pNetworkPlayer[ playerId ]->SetNick( szNick ); // Set the player IP m_pNetworkPlayer[ playerId ]->SetIP( szIP ); // Set the player serial m_pNetworkPlayer[ playerId ]->SetSerial( szSerial ); // Add this player for everyone m_pNetworkPlayer[ playerId ]->AddForWorld(); // Call scripting event CSquirrelArguments pArguments; pArguments.push( playerId ); pArguments.push( szNick ); pArguments.push( szIP ); pArguments.push( szSerial ); pCore->GetEvents()->Call( "onPlayerConnect", &pArguments ); CLogFile::Printf( "[join] %s has connected to the server.", szNick ); return true; }
// getVehicleCoordinates(vehicleid) SQInteger CVehicleNatives::GetCoordinates(SQVM * pVM) { EntityId vehicleId; sq_getentity(pVM, -1, &vehicleId); CNetworkVehicle * pVehicle = g_pClient->GetVehicleManager()->Get(vehicleId); if(pVehicle) { CVector3 vecPosition; pVehicle->GetPosition(vecPosition); CSquirrelArguments args; args.push(vecPosition.fX); args.push(vecPosition.fY); args.push(vecPosition.fZ); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; } sq_pushbool(pVM, false); return 1; }
void CServerRPCHandler::Command(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; CPlayer * pPlayer = g_pPlayerManager->GetAt(playerId); if(pPlayer) { String strCommand; if(!pBitStream->Read(strCommand)) return; CSquirrelArguments pArguments; pArguments.push(playerId); pArguments.push(strCommand.Get()); g_pEvents->Call("playerCommand", &pArguments); } }
// getVehicleAngularVelocity(vehicleid) SQInteger CVehicleNatives::GetAngularVelocity(SQVM * pVM) { EntityId vehicleId; sq_getentity(pVM, -1, &vehicleId); CNetworkVehicle * pVehicle = g_pClient->GetVehicleManager()->Get(vehicleId); if(pVehicle) { CVector3 vecTurnSpeed; pVehicle->GetTurnSpeed(vecTurnSpeed); CSquirrelArguments args; args.push(vecTurnSpeed.fX); args.push(vecTurnSpeed.fY); args.push(vecTurnSpeed.fZ); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; } sq_pushbool(pVM, false); return 1; }
void CVehicleManager::Remove(EntityId vehicleId) { if(!DoesExist(vehicleId)) return; CSquirrelArguments pArguments; pArguments.push(vehicleId); g_pEvents->Call("vehicleDelete", &pArguments); delete m_pVehicles[vehicleId]; m_pVehicles[vehicleId] = NULL; m_bActive[vehicleId] = false; }
void CServerRPCHandler::InVehicleSync(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; CPlayer * pPlayer = g_pPlayerManager->GetAt(playerId); if(pPlayer) { if(CVAR_GET_BOOL("frequentevents")) { CSquirrelArguments pArguments; pArguments.push(playerId); if(g_pEvents->Call("playerInVehicleSyncReceived", &pArguments).GetInteger() != 1 || g_pEvents->Call("playerSyncReceived", &pArguments).GetInteger() != 1) return; } EntityId vehicleId; InVehicleSyncData syncPacket; AimSyncData aimSyncData; if(!pBitStream->ReadCompressed(vehicleId)) return; if(g_pVehicleManager->DoesExist(vehicleId)) { if(!pBitStream->Read((char *)&syncPacket, sizeof(InVehicleSyncData))) return; bool bHasAimSyncData = pBitStream->ReadBit(); if(bHasAimSyncData) { if(!pBitStream->Read((char *)&aimSyncData, sizeof(AimSyncData))) return; } CVehicle * pVehicle = g_pVehicleManager->GetAt(vehicleId); if(pVehicle) { pPlayer->StoreInVehicleSync(pVehicle, &syncPacket, bHasAimSyncData, &aimSyncData); pVehicle->StoreInVehicleSync(&syncPacket); //pVehicle->SetLastTimeOccupied(SharedUtility::GetTime()); } } } }
void CServerRPCHandler::VehicleDeath(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId vehicleId; pBitStream->Read(vehicleId); CVehicle * pVehicle = g_pVehicleManager->GetAt(vehicleId); if(!pVehicle) return; if(pVehicle->GetDeathTime() != 0) return; CSquirrelArguments pArguments; pArguments.push(vehicleId); g_pEvents->Call("vehicleDeath",&pArguments); if(g_pEvents->Call("vehicleRespawn", &pArguments).GetInteger() == 1) { // Sure that we have no player in vehicle(otherwise crash >.<) if(pVehicle->GetDriver()) { EntityId playerId = pVehicle->GetDriver()->GetPlayerId(); CBitStream bsSend; bsSend.Write(playerId); bsSend.Write0(); g_pNetworkManager->RPC(RPC_ScriptingRemovePlayerFromVehicle,&bsSend,PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); } // Loop trough all players for(EntityId i = 0; i < MAX_PLAYERS; i++) { if(g_pPlayerManager->DoesExist(i)) { if(!g_pPlayerManager->GetAt(i)->IsOnFoot()) { if(g_pPlayerManager->GetAt(i)->GetVehicle()->GetVehicleId() == pVehicle->GetVehicleId()) { CBitStream bsSend; bsSend.Write(i); bsSend.Write0(); g_pNetworkManager->RPC(RPC_ScriptingRemovePlayerFromVehicle,&bsSend,PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, i, false); } } } } pVehicle->SetDeathTime(SharedUtility::GetTime()); } }
// getVehicleColor(vehicleid) SQInteger CVehicleNatives::GetColor(SQVM * pVM) { EntityId vehicleId; sq_getentity(pVM, -1, &vehicleId); CNetworkVehicle * pVehicle = g_pClient->GetVehicleManager()->Get(vehicleId); if(pVehicle) { BYTE byteColors[4]; pVehicle->GetColors(byteColors[0], byteColors[1], byteColors[2], byteColors[3]); CSquirrelArguments args; args.push((int)byteColors[0]); args.push((int)byteColors[1]); args.push((int)byteColors[2]); args.push((int)byteColors[3]); sq_pusharg(pVM, CSquirrelArgument(args, true)); return 1; } sq_pushbool(pVM, false); return 1; }
void CBlipManager::Delete(EntityId blipId) { if(!DoesExist(blipId)) return; CSquirrelArguments pArguments; pArguments.push(blipId); g_pEvents->Call("blipDelete", &pArguments); CBitStream bsSend; bsSend.WriteCompressed(blipId); g_pNetworkManager->RPC(RPC_DeleteBlip, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, INVALID_ENTITY_ID, true); m_bActive[blipId] = false; }
void CPlayerManager::Remove( EntityId playerId, unsigned int uiReason ) { // Is the player not active? if( !IsActive(playerId) ) return; // Remove this player for everyone m_pNetworkPlayer[ playerId ]->RemoveForWorld(); // Handle this quit with the vehicle manager pCore->GetVehicleManager()->HandlePlayerQuit( playerId ); // Call scripting event CSquirrelArguments pArguments; pArguments.push( playerId ); pArguments.push( SharedUtility::DiconnectReasonToString( uiReason ) ); pCore->GetEvents()->Call( "onPlayerDisconnect", &pArguments ); CLogFile::Printf( "[quit] %s has left the server (%s).", m_pNetworkPlayer[ playerId ]->GetNick(), SharedUtility::DiconnectReasonToString( uiReason ).Get() ); // Delete the player instance SAFE_DELETE( m_pNetworkPlayer[ playerId ] ); }
void CObjectManager::Delete(EntityId objectId) { if(!m_bActive[objectId]) return; CSquirrelArguments pArguments; pArguments.push(objectId); g_pEvents->Call("objectDelete", &pArguments); CBitStream bsSend; bsSend.WriteCompressed(objectId); g_pNetworkManager->RPC(RPC_DeleteObject, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, INVALID_ENTITY_ID, true); m_bActive[objectId] = false; }
// event rowClick(string guiName) bool OnRowClick(const CEGUI::EventArgs &eventArgs) { CEvents * pEvents = g_pClient->GetEvents(); String eventName ("rowClick"); if(!pEvents->IsEventRegistered(eventName)) return false; const CEGUI::WindowEventArgs eArgs = static_cast<const CEGUI::WindowEventArgs&>(eventArgs); CEGUI::Window * pWindow = eArgs.window; CSquirrel * pScript = g_pClient->GetClientScriptManager()->GetGUIManager()->GetScript(pWindow); CEGUI::MultiColumnList * pMultiColumnList = static_cast<CEGUI::MultiColumnList*>(eArgs.window); int iItemID = pMultiColumnList->getItemRowIndex(pMultiColumnList->getFirstSelectedItem()); CSquirrelArguments pArguments; pArguments.push(eArgs.window->getName().c_str()); // Window Name pArguments.push(iItemID); // Row CLogFile::Printf("Value: %i",iItemID); pEvents->Call(eventName, &pArguments, pScript); return true; }
void CServerRPCHandler::NameChange(CBitStream * pBitStream, CPlayerSocket * pSenderSocket) { // Ensure we have a valid bit stream if(!pBitStream) return; EntityId playerId = pSenderSocket->playerId; CPlayer * pPlayer = g_pPlayerManager->GetAt(playerId); if(pPlayer) { String strName; if(!pBitStream->Read(strName)) return; CSquirrelArguments pArguments; pArguments.push(playerId); pArguments.push(strName); if(g_pEvents->Call("playerRequestNameChange", &pArguments).GetInteger() == 1) pPlayer->SetName(strName); } }