uint32_t SC_ApplyDamage::execute() { _procesUnit->getCreature()->getAttibute()[Attributes::Hp] -= _damage; cerr<<"damge "<<_damage<<" type "<<_dmgType<<endl; char message[sizeof(SerialTakeDmgHeal)]; memset(message,0,sizeof(SerialTakeDmgHeal)); SerialTakeDmgHeal* data = (SerialTakeDmgHeal*)(message); data->_type = SerialType::SerialTakeDmgHeal; data->_size = sizeof(SerialTakeDmgHeal); data->_time = _time; data->_value = 0 - _damage; data->_flags = 0; cerr<<"id "<<_procesUnit->getCreature()->getId()<<endl; cerr<<"maxhp "<<_procesUnit->getCreature()->getAttibute()[Attributes::HpMax]<<endl; data->_unitId = _procesUnit->getId(); data->_casterId = _caster->getId(); data->_powerid = _power->getId(); data->_newvalue = max(0,_procesUnit->getCreature()->getAttibute()[Attributes::Hp]); cerr<<"new "<<data->_newvalue<<endl; for(list<Client*>::iterator it = _procesUnit->getSubscribers()[0].begin(); it != _procesUnit->getSubscribers()[0].end(); it++) { cerr<<"subsciber id "<<(*it)->getPlayerId()<<" unit "<<_procesUnit->getId() <<endl; if ((*it)->getPlayerId() == _procesUnit->getId()) { sendtoC(*it,message,sizeof(SerialTakeDmgHeal)); } } data->_newvalue = 0; if(_procesUnit->getCreature()->getAttibute()[Attributes::HpMax]) { data->_newvalue = _procesUnit->getCreature()->getAttibute()[Attributes::Hp]*100 / _procesUnit->getCreature()->getAttibute()[Attributes::HpMax]; data->_flags |= SerialTakeDmgHealBitF::ValueP; } for(list<Client*>::iterator it = _procesUnit->getSubscribers()[0].begin(); it != _procesUnit->getSubscribers()[0].end(); it++) { if ((*it)->getPlayerId() != _procesUnit->getPlayerId()) sendtoC(*it,message,sizeof(SerialTakeDmgHeal)); } return 0; }
void SPower::sendToClient(Client* cli){ char message[sizeof(SerialPower)]; memset(message,0,sizeof(SerialPower)); SerialPower* data = (SerialPower*)(message); data->_type = SerialType::SerialPower; data->_size = sizeof(SerialPower); data->_unitId = this->_owner->getId(); data->_powerId = this->_id; data->_iconId = this->_powertype->getIconId(); data->_cd = this->_cd; sendtoC(cli,message,sizeof(SerialPower)); }
uint32_t SPower::activate(uint32_t time, SObj* caster,SObj* target){ char message[sizeof(SerialBeginCast)]; memset(message,0,sizeof(SerialBeginCast)); SerialBeginCast* data = (SerialBeginCast*)(message); data->_type = SerialType::SerialBeginCast; data->_size = sizeof(SerialBeginCast); data->_time = time; data->_unitId = this->_owner->getId(); data->_powerid = this->getId(); data->_castTime = this->_powertype->getStats()[PowerTypeStats::CastTime]; for(list<Client*>::iterator it = this->_owner->getSubscribers()[0].begin(); it != this->_owner->getSubscribers()[0].end(); it++){ sendtoC(*it,message,sizeof(SerialBeginCast)); } SC_FirePower* cmd = new SC_FirePower(time+_powertype->getStats()[PowerTypeStats::CastTime],caster,target,this); caster->addCommand(cmd); //TODO send begin cast info to client }
int main(int argc, char *argv[]) { int i,maxfdp1; fd_set readfd; struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 50000; struct timeval Ntime,Ptime; srand((unsigned)time(NULL)); initConnection(); gettimeofday(&Ntime,NULL); Ptime = Ntime; toC_Buf = 0; toS_Buf = 0; Ci = 0; Si = 0; freopen("Bandwidth.txt","r",stdin); scanf("%d",&maxi); for(i = 0;i < maxi;i++) { scanf("%d",&BC[i]); BS[i] = BC[i]; } freopen("CON","r",stdin); while(1) { int ret; // Get request from client - (1)filename Packet pack; FD_ZERO(&readfd); FD_SET(c_socket, &readfd); FD_SET(s_socket, &readfd); maxfdp1 = max(c_socket, s_socket) + 1; ret = select(maxfdp1, &readfd, NULL, NULL, &timeout); if(FD_ISSET(c_socket, &readfd)) { ret = recvfrom(c_socket,&pack,sizeof(Packet),0,(struct sockaddr*)&client_addr,&cn); if (ret < 0) { printf("Receive Data from client failed.\n"); break; } int newz = toS_Buf+pack.dataLength; if (newz<=BandtoS) { sendtoS((char *)&pack, sizeof(Packet)); toS_Buf = newz; } } if(FD_ISSET(s_socket, &readfd)) { ret = recvfrom(s_socket, &pack, sizeof(Packet), 0, (struct sockaddr*)&server_addr, &sn); //printf("DataID:%d\n",pack.dataID); if (ret < 0) { printf("Server Recieve Data Failed!\n"); break; } int newz = toC_Buf+pack.dataLength; if (newz <= BandtoC) { sendtoC((char *)&pack, sizeof(Packet)); toC_Buf = newz; } } gettimeofday(&Ntime,NULL); if ((double)((Ntime.tv_sec-Ptime.tv_sec)*1000000.0+Ntime.tv_usec-Ptime.tv_usec)/1000000.0-1.0 > 0) { Ptime = Ntime; toC_Buf = 0; toS_Buf = 0; Ci = (Ci+1)%maxi; BandtoC = BC[Ci]; Si = (Si+1)%maxi; BandtoS = BS[Si]; printf("%d\n",BandtoS); } } exit(0); }